機器學習最基本的需求是要把資料切成訓練集、測試集
訓練集要做N次交叉驗證避免overfitting,並選出最好的參數,測試集當作真實的表現
以下是我隨意想的幾個問題
市場變動太快雜訊太多,訓練集不夠代表測試集,最近美國跟中國的貿易戰、川普行為、科技未來的發展、國際情勢都影響著股市,可能一個消息就讓某個產業大跌。
例如我曾經用機器學習做電腦產品論壇的情緒分類,其中被判正評的詞有:不錯、性價比高、很棒、很好...被判負評的詞有:不方便、不是很好、不佳、慢...這些很合理的詞,但負評中還有出現win8、usb這種跟情緒無關的詞,因為當大家提到win8就是在罵,而機器學習很會overfitting,當他只要看到win8就可以幾乎99%準確的判斷這句話的情緒,但現在已經幾乎沒有人再提win8了,如果模型很大的準確度是靠這個特徵的話可以預期之後準確度會下降很多,還有以前當人提到usb都是在嫌usb孔不夠用,未來會不會大家會開始嫌Type-C不夠?這時有取出這個特徵嗎?這個例子就是當未來的測試集跟訓練集差異很大就算有很好的交叉驗證跟測試集還是不保證持續有用,而且股市的變動我覺得比電腦產品快,主力大戶炒股的手法也改變很多。
每個特徵都要可以解釋,知道他是如何發揮功用,並持續研究
N次交叉驗證,股市要怎麼切N份呢?一份是個完整的景氣循環嗎?那之前已持續好幾年的大多頭,沒有很明顯的景氣循環要怎麼切,有些產業一年內有淡、旺季,這樣想合理的一份是一年,那大盤一直漲的前幾年來當訓練資料,會訓練出一個樂觀的模型,前幾年的股市大漲我想要找一個會虧錢的模型也是很困難,但這不能代表未來,如果大盤向上跟向下的資料都很好抽樣加入,因為無法收集到所有資料(例如主力硬拉某隻股票),我想這樣會因為雜訊太多而使模型不能好好學習而更不準。
可能試試用蒙地卡羅或拔靴法
回測不能代表什麼,你不該相信你的回測數據,所有的策略在回測很差後都會被丟棄只留下好的,因為已經無法解決問題2了,怎麼切都是有問題,無法保證不overfitting,就像常見介紹為什麼要做交叉驗證的範例,訓練集可以有99%準度,測試集則不到30%。這樣所做的努力都會是data leakage越努力就data leakage越厲害,一定可以不斷找出測試集表現良好的特徵,說不定會發現加上世界上某個城市的天氣特徵可以接近完美判斷在測試集的股票漲跌。
模型不能太複雜,越簡單合理就好
機器學習是從數據中學習,那要有多少前例做訓練才可以選出之前的被動元件?當把被動元件缺貨這個關鍵字特徵取出來但在過去也只有2次缺貨大漲的歷史紀錄,就算可以把相關的特徵都取出,資料可以有辦法可以學到嗎?人可以由前兩次的經驗判斷下賭注,模型可能沒辦法。
特徵要能夠多次重複出現驗證
如果策略不是頻繁的交易,一年就幾次,因為出手次數少可以很輕易的找到獲利的策略,只有頻繁經過驗證的才可信,模型沒有辦法驗證價值投資者的長期抱股方法。
策略避免太少交易,因為頻繁的交易就算要overfitting完美也是困難的,比較可信
先任意想了以上5個問題,我也沒有好的解決方法,所以打算把自己這幾年觀察股市賺錢的方法用機器學習優化就好,期望能幫我一次看多面向,但因為人的一些感覺很難量化,可能程式交易的績效會比手動還差,不過為了能夠更輕鬆賺錢我還是會繼續努力。
所以我的結論
為了持續發30天有先寫了一些文章在最近架的部落格,如果想爬股市資料可以看看